package cn.wolfcode.restful.controller;


import cn.wolfcode.restful.domain.Employee;
import cn.wolfcode.restful.util.JsonResult;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Arrays;
import java.util.List;

//@Controller     //该注解表示：spring容器启动的时候，创建该对象，前提是：当前对象被扫描到
public class EmployeeController_bak {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return "hello restful";
    }

    /**需求：查询所有的员工--使用Restful 接口的方式
     * 1>请求路径--确定资源--员工查询--/employees
     * 2>请求方式--查询--GET
     * 3>请求参数--查询所有--无
     * 4>请求响应---查询所有员工-一个集合List<Employee>--json格式
     *
     */

    //GET：查询所有员工
    @RequestMapping(value = "/employees",method = RequestMethod.GET)
    @ResponseBody
    public List<Employee> list(){

        //查询数据库，这里假装查询了数据库
        return  Arrays.asList(new Employee(1L,"小芳",22)
                ,new Employee(2L,"大芳",25));

        /**查询GET：小结
         * 1.使用Restful接口方式，路径名需要设置为当前对象+s
         * 2.返回的类型要对上
         * 3.查询使用GET方式
         */
    }

    /**
     * 需求：删除一个员工--使用Restful 接口的方式
     * 1.请求路径--删除操作--/employees
     * 2.请求方式--删除某个员工--DELETE
     * 3.请求参数--员工id--id
     * 4.请求响应，按照restful接口规范，应该返回一个空白页面，但是这里根据需求返回状态
     */

    @RequestMapping(value = "/employees",method = RequestMethod.DELETE)
    @ResponseBody
    public JsonResult delete(Long id){
        System.out.println(id+"删除操作");

        return  JsonResult.success(id);

        /**删除小结：
         * 1.删除需要使用DELETE方式进行删除
         * 2.如果选择路径中带取参数名的方式，那么方法上的形参就必须使用注解  @PathVariable 注解才能接受参数，否则无法接收
         * 3.浏览器地址栏的请求方式：默认都是GET请求，所以删除需要使用额外的工具
         *      IDEA本身自带的Restful接口测试方式，在TOOLS 下的HttpClient中Test
         *      选择外部工具Postman-win64-6.2.4-Setup 也可以
         * 4.注意：如果使用@PathVariable 注解，注意：路径中的参数名要一致
         * 如果不一致，需要设置参数名跟路径中的参数名一致，否则500异常
         *
         * 5.{id}  表示参数占位符
         */
    }


    /**需求：更新一个员工数据--使用Restful 接口的方式
     * 1>请求路径--更改操作--/employees
     * 2>请求方式--修改操作--PUT
     * 3>请求参数--id,name,age--等
     * 4>请求响应--更新之后的对象--json格式
     */
    @RequestMapping(value = "/employees",method = RequestMethod.PUT)
    @ResponseBody
    public Employee update(Long id, String name,int age){

        //System.out.println("修改成功");
        Employee employee = new Employee();
        employee.setId(id);
        employee.setName(name+"更新后的数据");
        employee.setAge(age);
        return employee;

        /**修改的小结：
         * 1.更新id为1的员工数据
         * 2.修改请求的方式是PUT方式
         * 3.带取参数的方式，可以选择对象封装，也可以使用单个参数带取
         * 4.也可以使用注解 @PathVariable 接收参数
         * 5.修改后一般是返回修改后的对象信息
         */
    }

    @RequestMapping(value = "/employees/{id}",method = RequestMethod.GET)
    @ResponseBody
    public Employee get(@PathVariable Long id){
        return new Employee(id,"芊芊",1);
    }




    /**需求：查询某个员工的信息--使用Restful 接口的方式
     *1.请求路径--查询某个员工操作--/employees--GET方式
     *2.请求方式：--GET
     *3.请求参数--id
     * 4.请求响应--插叙到的员工对象信息
     */
    @RequestMapping(value = "/employees/{id}/{name}/{age}",method = RequestMethod.GET)
    @ResponseBody
    public Employee get(Employee employee){

        //假装到数据库查询员工信息了
        return employee;

        /**小结：查询某个员工信息
         * 1.根据id进行员工的查询，这里使用到的是在路径中带取参数名的方式
         * 注意：必须使用@PathVariable注解接收参数，否则无法接收参数
         * 2.如果路径上的参数占位符和映射方法上的参数名不一致的时候
         * 需要明确指定占位符的名称。例如：@PathVariable("id") Long id
         *
         * 3.如果使用对象参数，可以按属性名字一一解析
         */

    }

    /**添加一个员工数据
     * 1>请求路径--添加操作--/employees
     * 2>请求方式--POST
     * 3>请求参数--id,name,age
     * 4>请求响应--Restful接口规范--返回新生成的资源对象
     */
    @RequestMapping(value = "/employees",method = RequestMethod.POST)
    @ResponseBody
    public Employee save(Employee employee){
        //添加操作
        employee.setId(7L);
        return employee;

        /**小结：添加操作
         * 1.添加新员工的操作
         * 2.Restful接口规范要求返回新创建的对象信息
         */
    }


}
